package com.sunhao.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentProvider;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.sunhao.myapplication.entity.Contact;

public class ContactAdd extends AppCompatActivity implements View.OnClickListener {

    private EditText et_name;
    private EditText et_phone;
    private EditText et_email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact_add);

        et_name = findViewById(R.id.et_name);
        et_phone = findViewById(R.id.et_phone);
        et_email = findViewById(R.id.et_email);

        Button contact_add = findViewById(R.id.contact_add);
        Button contact_query = findViewById(R.id.contact_query);
        contact_add.setOnClickListener(this);
        contact_query.setOnClickListener(this);


    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.contact_add:
                Contact contact = new Contact();
                contact.name = et_name.getText().toString().trim();
                contact.phone = et_phone.getText().toString().trim();
                contact.email = et_email.getText().toString().trim();


                // 1.ContentResolver多次写入，每次一个字段
                // addContacts(getContentResolver(), contact);
                // Toast.makeText(this, "添加成功，请去联系人查看", Toast.LENGTH_SHORT).show();

                // 2.方式二，批处理
                //一次性添加一个联系人信息

                addFullContacts(contact);
                break;

            case R.id.contact_query:

                break;
        }
    }

    private void addFullContacts(Contact contact) {
        //创建一个插入联系人主记录的内容操作器
        ContentProviderOperation op_main = ContentProviderOperation
                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .build();

        //创建一个插入联系人姓名记录的内容操作器
        ContentProviderOperation op_name = ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Contacts.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.Contacts.Data.DATA2, contact.name)
                .build();

        // 创建一个插入联系人手机号码记录的内容操作器
        ContentProviderOperation op_phone = ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Contacts.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.Contacts.Data.DATA1, contact.name)
                .withValue(ContactsContract.Contacts.Data.DATA2, contact.name)
                .build();
    }


    private void addContacts(ContentResolver contentResolver, Contact contact) {
        //联系人姓名
        ContentValues values = new ContentValues();
        //往raw_contacts 添加联系人记录，并获取添加后的联系人编号
        Uri uri = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, values);
        long rawContactId = ContentUris.parseId(uri);
        ContentValues name = new ContentValues();
        //关联联系人
        name.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
        //姓名的数据类型
        name.put(ContactsContract.Contacts.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
        //联系人的姓名
        name.put(ContactsContract.Contacts.Data.DATA2, contact.name);
        //往提供器添加联系人的姓名记录
        contentResolver.insert(ContactsContract.Data.CONTENT_URI, name);


        //手机号
        ContentValues phone = new ContentValues();
        //关联联系人
        phone.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
        //姓名的数据类型
        phone.put(ContactsContract.Contacts.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        //联系人的电话号码
        phone.put(ContactsContract.Contacts.Data.DATA1, contact.phone);
        //电话号码类型
        phone.put(ContactsContract.Contacts.Data.DATA2, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
        //往提供器添加联系人的姓名记录
        contentResolver.insert(ContactsContract.Data.CONTENT_URI, phone);


        //邮箱
        ContentValues email = new ContentValues();
        //关联联系人
        email.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
        //姓名的数据类型
        email.put(ContactsContract.Contacts.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
        //联系人的电话号码
        email.put(ContactsContract.Contacts.Data.DATA1, contact.email);
        //电话号码类型
        email.put(ContactsContract.Contacts.Data.DATA2, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
        //往提供器添加联系人的姓名记录
        contentResolver.insert(ContactsContract.Data.CONTENT_URI, email);


    }
}